package com.qf.work;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class Producer1 {
    public static void main(String[] args) throws IOException, TimeoutException {
        //① 创建一个连接工厂对象
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("cdm");

        //② 利用连接工厂获取一个连接对象
        Connection connection = factory.newConnection();

        //③ 利用连接对象获取一个channel对象
        Channel channel = connection.createChannel();

        //④ 利用channel对象声明一个队列
        /*
            String queue: 队列名称
            boolean durable:队列的数据是否持久化
            boolean exclusive：队列是否独占,如果设置为true，在同一时间只有当前channel可以连接
            boolean autoDelete:是否自动删除,channel端口后，队列自动删除
            Map<String, Object> arguments：额外参数，比如消息超时时间、队列的长度、死信队列设置等等
         */
        channel.queueDeclare("cdm.simple",true,false,false,null);

        //⑤ 利用channel发送消息到指定队列
        /*
            String exchange: 交换机的名称，如果是简单模式，不需要交换机，不能写null,可以写 ""
            String routingKey:路由键，如果没有交换机，这里指定为队列名称
            boolean mandatory:是否强制，消息返回确认时会用到这个参数
            boolean immediate: 目前rabbitmq不支持
            BasicProperties props：消息的属性配置，消息的唯一标识、消息超时时间、消息是否持久化
            byte[] body：消息内容

            //String exchange, String routingKey, BasicProperties props, byte[] body
         */

        for (int i = 0; i < 10; i++) {
            channel.basicPublish("","cdm.simple",null,("hello rabbitmq-"+i).getBytes(StandardCharsets.UTF_8));
        }
        //⑥ 释放资源
        channel.close();
        connection.close();
    }
}
